<?php

namespace utility;


use Endroid\QrCode\Builder\Builder;
use Endroid\QrCode\Encoding\Encoding;
use Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelHigh;
use Endroid\QrCode\Label\Alignment\LabelAlignmentCenter;
use Endroid\QrCode\Label\Font\NotoSans;
use Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeMargin;
use Endroid\QrCode\Writer\PngWriter;
use think\Exception;


/**
 * 二维码操作

 * Class SerCurl
 * @package App\Service
 */
class SelfQrCode
{

    /**
     * 功能：生成二维码
     * @param string $data 数据
     * @param string $savePath 图片存储路径
     * @param string $filename 图片名称
     * @param string $qrSize 二维码图大小
     */
    public static function create_qrcode(string $data,string $savePath,string $filename = 'qrcode' ,int $qrSize = 300)
    {
        if (!class_exists(Builder::class)) {
            throw  new  Exception("请先执行 'composer require endroid/qr-code'");
        }
        if (empty($savePath))
            return ['二维码地址不存在',''];
        $qr_code = (new Builder())
            ->writer(new PngWriter())  // 设置二维码的图像格式为PNG
            ->writerOptions([])        // 设置写入器选项（这里为空）
            ->data($data)              // 设置二维码的数据内容
            ->encoding(new Encoding('UTF-8'))  // 设置编码方式为UTF-8
            ->errorCorrectionLevel(new ErrorCorrectionLevelHigh())  // 设置错误纠正级别为高
            ->size($qrSize)                // 设置二维码的大小为300像素
            ->margin(10)               // 设置二维码周围的空白边距为10个模块
            ->roundBlockSizeMode(new RoundBlockSizeModeMargin())  // 设置圆角块模式
            // ->logoPath(__DIR__.'/path/to/logo.png')  // 可选：设置二维码中间的logo路径
            ->labelText('')    // 可选：设置标签文本
            ->labelFont(new NotoSans(20))  // 可选：设置标签文本的字体和大小
            ->labelAlignment(new LabelAlignmentCenter())  // 可选：设置标签文本对齐方式
            ->build();  // 构建二维码

        // 设置保存路径
        $savePath = '/'.$savePath. '/' .$filename . '.png';

        // 确保目录存在
        $directory = dirname('.' . DIRECTORY_SEPARATOR . $savePath);
        if (!is_dir($directory)) {
            mkdir($directory, 0755, true);
        }
        file_put_contents('.' . DIRECTORY_SEPARATOR . $savePath, $qr_code->getString());
        return ['',$savePath];
    }
    /**
     * 生成二维码
     * @param string $url 地址
     */
    public static function qr_code($url){
        if (!class_exists(QRCode::class)) {
            throw  new  Exception("请先执行 'composer require chillerlan/php-qrcode'");
        }
        return (new QRCode)->render($url);
    //    echo '<img src="'.(new QRCode)->render($url).'" alt="QR Code" />';
    }
}